layout.tsx 1.1 KB

123456789101112131415161718192021222324252627282930
  1. import '../global.css';
  2. import { RootProvider } from 'fumadocs-ui/provider/next';
  3. import { Inter, Vazirmatn } from 'next/font/google';
  4. import { i18n, localeDirection } from '@/lib/i18n';
  5. import { provider } from '@/lib/i18n-ui';
  6. import SearchDialog from '@/components/search-dialog';
  7. const inter = Inter({ subsets: ['latin'], display: 'swap' });
  8. // Persian UI font; covers Arabic + Latin glyphs so mixed content renders well.
  9. const vazirmatn = Vazirmatn({ subsets: ['arabic'], display: 'swap' });
  10. export function generateStaticParams() {
  11. return i18n.languages.map((lang) => ({ lang }));
  12. }
  13. export default async function LangLayout({ params, children }: LayoutProps<'/[lang]'>) {
  14. const { lang } = await params;
  15. const dir = localeDirection(lang);
  16. const fontClassName = lang === 'fa' ? vazirmatn.className : inter.className;
  17. return (
  18. <html lang={lang} dir={dir} className={fontClassName} suppressHydrationWarning>
  19. <body className="flex min-h-screen flex-col" suppressHydrationWarning>
  20. <RootProvider i18n={provider(lang)} search={{ SearchDialog }}>
  21. {children}
  22. </RootProvider>
  23. </body>
  24. </html>
  25. );
  26. }